/**
 * 创建Redis客户端实例
 * 使用Redis客户端库创建一个客户端实例，并配置连接信息。
 * 这个实例将用于所有对Redis的读写操作。
 */
import { createClient } from "redis";
const client = createClient({
    socket: {
        host: "127.0.0.1",
        port: 6379,
    },
});

/**
 * 初始化Redis连接
 * 这个函数用于建立到Redis服务器的连接。
 * 在进行任何Redis操作之前，应该先调用这个函数确保连接已建立。
 */
export async function initReids() {
    await client.connect();
}

/**
 * 从Redis获取值
 * @param key 键名
 * @returns 键对应的值，如果键不存在则返回null。
 * 这个函数用于从Redis中获取指定键的值。它是一个异步操作，需要等待操作完成。
 */
export async function getReids(key: string) {
    return await client.get(key);
}

/**
 * 设置Redis键的值
 * @param key 键名
 * @param value 键的值
 * @param time 过期时间（秒），默认为300秒。
 * 这个函数用于设置Redis中指定键的值，并可选地设置键的过期时间。
 * 它是一个异步操作，需要等待操作完成。
 */
export async function setReids(key: string, value: string, time: number = 300) {
    await client.set(key, value, { EX: time });
}

/**
 * 删除Redis中的键
 * @param key 键名
 * 这个函数用于从Redis中删除指定的键。
 * 它是一个异步操作，需要等待操作完成。
 */
export async function delReids(key: string) {
    await client.del(key);
}

/**
 * 处理Redis客户端的错误事件
 * 这个事件监听器会在Redis客户端发生错误时被调用。
 * 它将错误打印到控制台，帮助开发者识别和调试Redis相关的问题。
 */
client.on("error", (err) => console.log("Redis Client Error", err));

/**
 * 导出Redis客户端实例
 * 这使得其他模块能够使用和操作Redis客户端。
 * 包括初始化连接、进行读写操作以及处理错误。
 */
export default client;
